home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 3 / BBS in a box - Trilogy III.iso / Files / Prog / A / 10⁄92 & 11⁄92 Mailing / SwapMMUModeƒ / SwapMMUMode3.p < prev   
Encoding:
Text File  |  1992-08-31  |  1.2 KB  |  58 lines  |  [TEXT/MPS ]

  1. UNIT Ext4D_SwapMMU;
  2.  
  3. {$IFC Undefined THINK_PASCAL }
  4.     {$D- }
  5.     {$R- }
  6. {$ENDC }
  7.  
  8. INTERFACE
  9.  
  10. {$IFC Undefined THINK_PASCAL }
  11.     Uses    MemTypes,
  12.           Memory,
  13.                 QuickDraw,
  14.                 OSIntf,
  15.             ToolIntf,
  16.                 PackIntf,
  17.                 OSUtils;
  18. {$ENDC}
  19.  
  20. {$IFC Undefined THINK_PASCAL }
  21.     {$D+ }
  22.     {$R- }
  23. {$ENDC }
  24.  
  25. PROCEDURE GrabMemory(VAR FromAddr:LongInt;VAR Result:Str255);
  26.  
  27. IMPLEMENTATION
  28.  
  29. PROCEDURE StripPCAddress;EXTERNAL;
  30.  
  31. PROCEDURE GrabMemory(VAR FromAddr:LongInt;VAR Result:Str255);
  32. CONST Max24BitsAddr = 8388608;
  33. VAR        CurMMUMode:SignedByte;
  34.             SrcPtr,DstPtr:Ptr;
  35. BEGIN
  36.     StripPCAddress;                                                                                                { Remove the flags byte }
  37.     Result[0]:=Chr(128);
  38.   IF FromAddr>=0 THEN
  39.     BEGIN
  40.         IF FromAddr>=Max24BitsAddr THEN
  41.         BEGIN
  42.             SrcPtr:=StripAddress(Ptr(@FromAddr));                                            { Remove the flags byte }
  43.             DstPtr:=StripAddress(Ptr(@Result));                                              { Remove the flags byte }
  44.             CurMMUMode:=GetMMUMode;
  45.             IF CurMMUMode=False32b THEN
  46.             BEGIN
  47.                 CurMMUMode:=True32b;
  48.                 SwapMMUMode(CurMMUMode);                                                                { No problem }
  49.             END;
  50.             BlockMove(SrcPtr,DstPtr,128);                                                      { No problem }
  51.             IF CurMMUMode=False32b THEN SwapMMUMode(CurMMUMode);
  52.         END
  53.         ELSE BlockMove(Ptr(FromAddr),Ptr(ORD4(@Result)+1),128);
  54.     END
  55.     ELSE Result:='Bad address';
  56. END;
  57.  
  58. END.